C'de, belirli int sabitlerinin bir liste halinde tanımlanan karakter dizilerine atanmasına yarayan numaralandırma kavramının genel yapısı aşağıda gösterilmektedir:
enum etiket-adı {liste} değişken-listesi;
etiket-adı veya değişken-listesi ifadelerinden biri isteğe bağlı olarak tanımlanır. etiket-adı ifadesi numaralandırma işleminin adını gösterir. Numaralandırma değişkenleri sadece numaralandırma bildirimi içinde yer alan değerleri içerebilir. Bu özelliği aşağıdaki satır ile incelemeye çalışalım:
enum renk { mavi, bg-orangecu, mor, siyah } e;
Yukarıdaki satırda, e değişkenine sadece mavi, bg-orangecu, mor ve siyah değerleri verilebilir. Normal olarak derleyici listedeki sabitlere en soldan başlamak suretiyle birer değer artırarak int değerler atar. En solda yer alan değere 0'dan başlayarak numara verilir. Yani burada mavi'ye 0, bg-orangecu'ya 1, mor'a 2 ve siyah'a 3 değeri verilir. Numaralandırma yöntemi ile elde edilen değerler #define direktifi kullanarak da elde edilebilir:
#define mavi 0
#define bg-orangecu 1
#define mor 2
#define siyah 3
Listedeki kelimelere istediğimiz değerleri verebiliriz.
enum renk { mavi=3, bg-orangecu, mor=7, siyah } e1;
Yukarıdaki satırda, mavi'ye 3, bg-orangecu'ya 4, mor'a 7 ve siyah'a 8 değeri verilir.
Numaralandırma bir kez tanımlandıktan sonra programın herhangi bir yerinde e1 dışında bir değişken tanımlayabiliriz:
enum renk e2
Şimdi, numaralandırma kavramını örneklerle incelemeye çalışalım:
#include <stdio.h>
enum renk { mavi, bg-orangecu, mor };
int main(void)
{
enum renk e1, e2, e3;
e1 = mavi;
e2 = bg-orangecu;
e3 = mor;
printf("%d %d %d\n", e1, e2, e3);
printf("%d %d %d", mavi, bg-orangecu, mor);
return 0;
}
Yukarıdaki programı derleyip çalıştırdığımızda, aşağıdaki ifadeleri ekrana yazar:
0 1 2 0 1 2
Program, renk çeşitlerini içeren 3 elemanlı ve renk adında bir numaralandırma bildirimi yapar. Bildirimden sonra tanımladığı e1, e2 ve e3 adlı numaralandırma değişkenlerine sıra ile numaralandırma elemanlarının değerlerini atar. Listede yer alan değerleri hem direk olarak hem de değişkenler yoluyla ekrana yazar.
#include <stdio.h>
enum renk { mavi=7, bg-orangecu, mor=12 };
int main(void)
{
enum renk e1, e2, e3;
e1 = mavi;
e2 = bg-orangecu;
e3 = mor;
printf("%d %d %d\n", e1, e2, e3);
printf("%d %d %d", mavi, bg-orangecu, mor);
return 0;
}
Yukarıdaki programı derleyip çalıştırdığımızda, aşağıdaki ifadeleri ekrana yazar:
7 8 12 7 8 12
Program, bir önceki programın yaptığı işlemin aynısını gerçekleştirir. Tek farkı, numaralandırma elemanlarına verilen değerlerin otomatik olarak değil bildirim esnasında verilmiş olmasıdır.
#include <stdio.h>
enum meyve { Karpuz, Kavun, Kiraz, Erik } e;
int main(void)
{
int option;
printf("Bir sayı giriniz[0-3]: ");
scanf("%d", &option);
e = option;
switch (e) {
case Karpuz: printf("Karpuz");
break;
case Kiraz: printf("Kiraz");
break;
case Erik: printf("Erik");
break;
case Kavun: printf("Kavun");
}
return 0;
}
Program, girilen sabit bir değerin atandığı numaralandırma elemanının adını ekrana yazar.